#include<stdio.h>
#include<stdlib.h>
typedef struct lienlac{
    int from,to,used;
};
lienlac arr[809];
int m,n,bam[10000],use[10000];
int stack[10000],last=0;
int sosanh(const void *a,const void *b){
    if((*(lienlac *) a).from != (*(lienlac *)b).from) 
        return ((*(lienlac *) a).from -(*(lienlac *)b).from) ;
    else return ((*(lienlac *) a).to -(*(lienlac *)b).to) ;
}
void input(){
    int u,v,i;
    scanf("%d%d",&n,&m); 
    for(i=0;i<m;i++){
        scanf("%d%d",&u,&v);
        arr[i].from=u;
        arr[i].to=v;
        arr[i].used=0;
    }
    qsort(arr,m,sizeof(lienlac),sosanh);
    for(i=1;i<=n;i++)bam[i]=-1;
    bam[arr[0].from]=0;
    for(i=1;i<m;i++){
        if(arr[i].from !=arr[i-1].from)
            bam[arr[i].from]=i;
    }
        
}
void find(int index){
    int begin=arr[index].from;
    int u,v,i;
    stack[last=0]=arr[index].to;
    do{
        i=bam[u=stack[last--]];
        if(i>=0)while(arr[i].from==u){
            if(arr[i].to!=begin  && !arr[i].used){
                stack[++last]=arr[i].to;
                use[arr[i].to]=1;
                arr[i].used=1;
            }
            i++;
        }
    }while(last>=0);
}
                
void process(){
    int i=0;
    for(i=0;i<m;i++)
        if(!arr[i].used)find(i);
}
void output(){
    int count=0,i=1;
    for(i=1;i<=n;i++)
        if(use[i]==0)count++;
    printf("%d",count);
}
int main(){
    input();
    process();
    output();
    return 0;
}
